/**
 * 项目名称: Topic_606.cpp
 * 项目路径: study/DataStructure/LeetCode/树/中等
 * 编辑时间: 2024年08月20日07时51分49秒
 * 用   户: 轻尘
 */

#include <bits/stdc++.h>

using namespace std;

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;

    TreeNode() : val(0), left(nullptr), right(nullptr) {}

    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}

    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};

class Solution {
public:
    /**
     * 1.当前节点有两个孩子,递归时,两个孩子的结果外都加上一层括号
     * 2.当前节点没有孩子,不需要在节点后面加上任何括号
     * 3.当前结点只有左孩子,只需在左孩子的结果外加上一层括号
     * 4.当前节点只有右孩子,先加上一层空的"()",在对右孩子进行递归,并在结果外加上一层括号
     * @param root
     * @return
     */
    string tree2str(TreeNode* root) {
        if(root == nullptr)return "";
        if(root->left == nullptr && root->right == nullptr)return to_string(root->val);
        if(root->right == nullptr)return to_string(root->val)+"(" + tree2str(root->left)+")";
        return to_string(root->val)+"("+ tree2str(root->left)+")("+ tree2str(root->right)+")";
    }
};